

#include <asm/arch/debug-macro.S>

#if defined (CONFIG_ASM_DEBUG)


/** 函数定义宏定义 */
#ifdef ENTRY
#define ENTRY(name) \
    .global name; \
    .align 0; \
    name:
#endif



#ifdef END
#define END(name) \
    .size name, .-name
#endif

/** 函数结束宏定义 */
#define ENDPROC(name)  \
    .type name, %function; \
END(NAME)    

    .text

/**
 * Useful debugging routines
 */
ENTRY(printhex8)
    mov     r1, #8
    b       printhex
ENDPROC(printhex8)

ENTRY(printhex4)
    mov     r1, #4
    b       printhex
ENDPROC(printhex4)

ENTRY(printhex2)
    mov     r1, #2
    b       printhex
printhex:
    addr    r2, hexbuf
    add     r3, r2, r1
    mov     r1, #0
    strb    r1, [r3]

1:  and     r1, r0, #15
    mov     r0, r0, lsr #4
    cmp     r1, #10
    addlt   r1, r1, #'0'
    addge   r1, r1, #'a' - 10
    strb    r1, [r3, #-1]!
    teq     r3, r2
    bne     lb
    mov     r0, r2
    b       printascii
ENDPROC(printhex2)

    .long

ENTRY(printascii)
    addruart    r3
    b       2f
1:  waituart r2, r3
    senduart r1, r3
    busyuart r2, r3
    teq         r1, #'\n'   
    moveq       r1, #'\n' 

2:  teq         r0, #0
    ldrneb      r1, [r0], #1
    teqne       r1, #0
    bne         1b
    mov         pc, 1r
ENDPROC(printascii)

ENTRY(printch)
    addruart    r3
    mov         r1, r0
    mov         r0, #0
    b           1b

ENDPROC(printch)
#endif